package com.bdqn.sys.controller;

import com.alibaba.fastjson.JSON;
import com.bdqn.common.utitls.SystemConstants;
import com.bdqn.sys.controller.utils.FileUploadUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/file")
public class FileUploadController {

        /**
         * 文件上传
         * @param attach  MultipartFile attach参数中attach必须和 ,field:"attach" 中参数一致
         * @return
         */
        @RequestMapping("/uploadFile")
        public  String uploadFile(MultipartFile attach){
            Map<String,Object> map=new HashMap<String, Object>();

            //判断是否有选中文件
            //如果选中文件了的话，就需要进行一系列的文件上传操作
            if(!attach.isEmpty()) {
              //得到原始文件的名称
              String oldName=attach.getOriginalFilename();
              //将文件重命名
              String newFileName= FileUploadUtils.createNewFileName(oldName);
              //为了解决同一个文件夹文件过多文件问题，使用日期作为文件夹管理
                String datePath=new SimpleDateFormat("yyyy-MM-dd").format(new Date());
              //组装文件名
                String  finalName=datePath+"/"+newFileName+"_temp";
              //创建文件对象
                //参数一是文件上传地址，第二个参数是文件上传组装的名字
                File dest=new File(SystemConstants.IMAGE_UPLOAD_PATH,finalName);
                //判断文件夹是否存在,不存在则创建
                if (!dest.getParentFile().exists()){
                    //mkdirs() 它建立文件夹的原则是：如果父文件夹不存在并且最后一级子文件夹不存在，它就自动新建所有路经里写的文件夹；如果父文件夹存在，它就直接在已经存在的父文件夹下新建子文件夹。
                    //mkdir()此方法不能在不存在的文件夹下建立新的文件夹
                    dest.getParentFile().mkdirs();//创建文件夹
                }
                try {
                    //将文件保存到磁盘中
                    attach.transferTo(dest);
                    //图片回显，将图片信息放到map集合中
                    map.put("imagePath",finalName);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return JSON.toJSONString(map);
        }

}
